package org.domain.sigepac.Entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.domain.sigepac.Utils;
import org.domain.sigepac.repository.RepositorioPsicogenese;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

@Entity
@Table(name="tb_psicogenese")
public class Psicogenese extends EntidadeAbstrata {
	
	private static final long serialVersionUID = 7008895038547005498L;


	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
	
	
	@Column(name = "codigo", nullable = false,unique=true, length = 5)
	@NotNull
	@Length(max = 5)	
	private String codigo;
	
	@Column(name = "nome", nullable = false, length = 500)
	@NotNull
	@Length(max = 500)	
	private String nome;
	
	@Column(name = "ordem", nullable = false)
	@NotNull
	private Integer ordem;
	

	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name = "id_grupo", referencedColumnName = "id", nullable = false)
	@NotNull
	private GrupoPsicogenese grupo;
	
	
	public Serializable getId() {
		// TODO Auto-generated method stub
		return id;
	}


	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	public GrupoPsicogenese getGrupo() {
		return grupo;
	}
	
	public void setGrupo(GrupoPsicogenese grupo) {
		this.grupo = grupo;
	}
	
	public Integer getOrdem() {
		if(ordem==null && grupo!=null){
				try{
					RepositorioPsicogenese repositorioPsicogenese= Utils.component("repositorioPsicogenese");
					ordem=repositorioPsicogenese.porOrdemDecrescente(grupo).get(0).ordem+1;
				}catch(Exception e){
					ordem=1;
				}
		}
		return ordem;
	}
	public void setOrdem(Integer ordem) {
		this.ordem = ordem;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return codigo.toUpperCase()+" - "+nome;
	}

}
